﻿// Gateway.Api 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
// 
// 本项目主要遵循 MIT 许可证和 Apache 许可证（版本 2.0）进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
// 
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动！任何基于本项目二次开发而产生的一切法律纠纷和责任，我们不承担任何责任！

using Aurora.AI.SqlSugar.Framework;
using Aurora.AI.Wiki.Domain.Domain.ChatApplications.Aggregates;
using SqlSugar;

namespace Aurora.AI.Wiki.Domain.DataAccess.Mapping;

/// <summary>
/// chat record mapping
/// </summary>
public class ChatRecordMapping : IEntityMapping<ChatRecord>
{
    public void EntityServiceMapping(EntityColumnable<ChatRecord> entityColumnInfo)
    {
        entityColumnInfo
            .UpdateProperty(it => it.Id, it =>
            {
                it.IsPrimarykey = true;
                it.DataType = "varchar(50)";
                it.ColumnDescription = "主键标识";
            }).UpdateProperty(it => it.ApplicationId, it =>
            {
                it.DataType = "varchar(50)";
                it.ColumnDescription = "应用";
                it.IsNullable = false;
            })
            .UpdateProperty(it => it.DialogId, it =>
            {
                it.DataType = "varchar(50)";
                it.ColumnDescription = "窗口标识";
                it.IsNullable = false;
            }).UpdateProperty(it => it.Question, it =>
            {
                it.DataType = "text";
                it.ColumnDescription = "提问内容";
                it.IsNullable = true;
            }).UpdateProperty(it => it.Images, it =>
            {
                it.DataType = "text";
                it.ColumnDescription = "图片资源，json数组形式";
                it.IsNullable = true;
            })
            .UpdateProperty(it => it.WebSearch, it =>
            {
                it.DataType = "text";
                it.ColumnDescription = "web search json 数组格式";
                it.IsNullable = true;
            })
            .UpdateProperty(it => it.SourceFiles, it =>
            {
                it.DataType = "text";
                it.ColumnDescription = "source file  数组格式";
                it.IsNullable = true;
            })
            .UpdateProperty(it => it.Videos, it =>
            {
                it.DataType = "text";
                it.ColumnDescription = "video json 格式";
                it.IsNullable = true;
            })
            .UpdateProperty(it => it.Role, it =>
            {
                it.DataType = "varchar(20)";
                it.ColumnDescription = "角色 user assistant system";
                it.IsNullable = false;
                it.DefaultValue = "user";
            })
             .UpdateProperty(it => it.AIType, it =>
             {
                 it.DataType = "varchar(20)";
                 it.ColumnDescription = "ai 类型 chat images";
                 it.IsNullable = false;
                 it.DefaultValue = "chat";
             })
            .UpdateProperty(it => it.Creator, it =>
            {
                it.DataType = "varchar(50)";
                it.ColumnDescription = "创建人";
                it.IsNullable = true;
            }).UpdateProperty(it => it.CreationTime, it =>
            {
                it.DataType = "datetime";
                it.ColumnDescription = "创建时间";
                it.IsNullable = true;
            }).UpdateProperty(it => it.Modifier, it =>
            {
                it.DataType = "varchar(50)";
                it.ColumnDescription = "修改人";
                it.IsNullable = true;
            }).UpdateProperty(it => it.ModificationTime, it =>
            {
                it.DataType = "datetime";
                it.ColumnDescription = "修改时间";
                it.IsNullable = true;
            });
    }

    public void EntityNameServiceMapping(EntityInfo entityInfo)
    {
        entityInfo.DbTableName = MappingConstant.TableNamePrefix + "chat-record";
        entityInfo.TableDescription = "对话记录表";
    }
}